#ifndef Tab2D_h
#define Tab2D_h

#include <iostream>
#include "Exception.h"

namespace FPTK{
template<class T>
class Tab2D{
public:
    Tab2D(int _R,int _C);
    ~Tab2D();
    Tab2D (const Tab2D<T>& t);

    //T GetElement(int i,int j);
    const T GetElement(int i,int j) const;
    void SetElement(T value,int i,int j);
    void Zeros();
    void TestNParam(...);
    void Fill(T _var);
    //int GetNbColumn();
    //int GetNbRow();
    const int GetNbColumn() const;
    const int GetNbRow() const;
    bool operator==(const Tab2D<T>& t2) const;
    bool operator!=(const Tab2D<T>& t2) const;
    Tab2D<T> operator=(const Tab2D<T>& t2);
    friend std::ostream& operator<<(std::ostream& os,const Tab2D<T>& obj)
    {    
        for(int i=0;i<obj.R;i++)
        {
            for(int j=0;j<obj.C;j++)
            {
                os<<obj.GetElement(i,j)<<" ";
            }
            os<<std::endl;
        }
        return os;
    }
protected:
    int R,C;
    T *tab;
};

}//end namespace FPTK

#include "Tab2D.cxx"

#endif